package com.baizhi.method;

/**
 * 线程的优先级
 * 线程共有10个优先级，分别对应1-10，其中最低的是1，最高的是10，默认是5
 * 线程启动之后便纳入到线程调度器中统一管理，线程不能主动获取时间片，只能被动等待分配，调度器会尽可能均匀的分配时间片
 * 给每个线程，但是调整线程的优先级就可以改变一个线程获取时间切片的几率，
 * 线程的优先级越高线程获取时间片的几率就越大，次数就越多
 *
 *
 * 由于现在CUP是多核心的，分配到不同核心商的线程优先级不起作用
 */
public class PriorityDemo {
    public static void main(String[] args) {
        Thread min = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    System.out.println("min");
                }
            }
        };


        Thread norm = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    System.out.println("norm");
                }
            }
        };

        Thread max = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    System.out.println("max");
                }
            }
        };

        //设置min线程的优先级最小
        //只能设置1-10 超出范围则抛出异常IllegalArgumentException
        //一般我们选择使用常量
        min.setPriority(Thread.MIN_PRIORITY);

        //设置max线程的优先级最大
        max.setPriority(Thread.MAX_PRIORITY);


        min.start();
        norm.start();
        max.start();

    }
}
